package kr.co.mustgo.model.service.qna;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import kr.co.mustgo.domain.qna.QnABoard;
import kr.co.mustgo.model.dao.qna.QnABoardDAO;
import kr.co.mustgo.util.BoardUtilities;
import kr.co.mustgo.util.PagingBean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class QnABoardServiceImpl implements QnABoardService{

	@Autowired
	private QnABoardDAO qnaBoardDAO;
	
	@Override
	public void writeContent(QnABoard qnaBoard) {

//		String c = BoardUtilities.changeContentForDB(qnaBoard.getContents());
//		qnaBoard.setContents(c);
		qnaBoardDAO.insertContentForNewCount(qnaBoard);

	}
	@Override
	public void modifyContent(QnABoard qnaBoard) {
//		qnaBoard.setContents(BoardUtilities.changeContentForDB(qnaBoard.getContents()));
		qnaBoardDAO.updateContent(qnaBoard);
		
	}

	@Override
	public QnABoard getContentByCode(int code) {
		//1. DAO의 메소드를 이용해 조회수를 1 증가 시킨다.
		qnaBoardDAO.updateViewCount(code);
		//2. DAO의 메소드를 이용해 글 정보 조회
		QnABoard qnaBoard = qnaBoardDAO.selectContentByCode(code);
		return qnaBoard;
	}
	@Override	
	public Map getQnABoardList(int page){
		HashMap map = new HashMap();
//		1. DAO메소드를 이용해 매개변수로 받은 페이지에 보여줄 게시물들을 ArrayList로 조회
		List<QnABoard>list = qnaBoardDAO.selectQnABoardList(page);
		
		map.put("list", list);
//		2. PagingBean객체를 생성 ( 필요 정보 : 전체 게시물의 개수, 보고자 하는 페이지 번호)
//		2-1 : DAO의 메소드를 이용해 전체 게시물 수 조회
		int totalContent = qnaBoardDAO.selectTotalContent();
//		2-2 : PagingBean 객체 생성
		PagingBean pagingBean = new PagingBean(totalContent, page);
		map.put("pagingBean", pagingBean);
		return map;
	}

	@Override
	public QnABoard getContentByNoForForm(int code) {
		QnABoard qnaBoard = qnaBoardDAO.selectContentByCode(code);
//		qnaBoard.setContents(BoardUtilities.changeContentForTextArea(qnaBoard.getContents()));
		return qnaBoard;
	}
	@Override
	public void deleteContentByCode(int code) {
		qnaBoardDAO.deleteContentByCode(code);
		
	}
	@Override
	public void replyContent(QnABoard qnaBoard) {
//			1. DAO의 메소드를 이용해 DB에 같은 refamily의 게시물들 중 답변하고자하는 글의 restep 보다 큰 게시물들의 restep들을 1씩 증가시킨다.
			qnaBoardDAO.updateRestep(qnaBoard.getrefamily(), qnaBoard.getRestep());
//			2. 등록하려는 게시물 데이터(매개변수로 받은 board)의 restep, relevel을 1 증가시킨다. - board가 가지고 있는 것은 원본글의 값이므로 자신의 값으로 변경하는 것.
			qnaBoard.setRestep(qnaBoard.getRestep()+1);
			qnaBoard.setRelevel(qnaBoard.getRelevel()+1);
//			3. 사용자가 입력한 글의 내용을 DB용으로 변환한 것을 매개변수로 받은 board에 설정한다.
//			qnaBoard.setContents(BoardUtilities.changeContentForDB(qnaBoard.getContents()));
//			4. DAO의 메소드를 이용해 글을 DB에 넣는다.
			qnaBoardDAO.insertContentForReply(qnaBoard);

	}
	@Override
	public Map getQnABoardListCategory(int page, String category) {
		HashMap map = new HashMap();
		
//		1. DAO메소드를 이용해 매개변수로 받은 페이지에 보여줄 게시물들을 ArrayList로 조회
		List<QnABoard>list = qnaBoardDAO.selectQnABoardListCategory(page, category);
		
		map.put("list", list);
//		2. PagingBean객체를 생성 ( 필요 정보 : 전체 게시물의 개수, 보고자 하는 페이지 번호)
//		2-1 : DAO의 메소드를 이용해 전체 게시물 수 조회
		int categoryContent = qnaBoardDAO.selectCategoryContent(category);
//		2-2 : PagingBean 객체 생성
		PagingBean pagingBean = new PagingBean(categoryContent, page);
		map.put("pagingBean", pagingBean);
		return map;
	}
	@Override
	public Map getQnABoardSearch(int page, String search, String keyword) {
		HashMap map = new HashMap();
		
//		1. DAO메소드를 이용해 매개변수로 받은 페이지에 보여줄 게시물들을 ArrayList로 조회
		List<QnABoard>list = qnaBoardDAO.selectQnABoardSearch(page, search, keyword);
		map.put("list", list);
//		System.out.println("adkfajkdf"+list);
//		2. PagingBean객체를 생성 ( 필요 정보 : 전체 게시물의 개수, 보고자 하는 페이지 번호)
//		2-1 : DAO의 메소드를 이용해 전체 게시물 수 조회
		int searchContent = qnaBoardDAO.selectSearchContent(search, keyword);
//		2-2 : PagingBean 객체 생성
		PagingBean pagingBean = new PagingBean(searchContent, page);
		map.put("pagingBean", pagingBean);
		return map;
	}


}
